// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rbchat.logic.alarm.impl;

import android.text.SpannableString;
import android.text.style.DynamicDrawableSpan;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

//import com.eva.android.widget.AsyncBitmapLoader;
import com.eva.epc.common.util.CommonUtils;
import com.x52im.rbchat.cache.ImageCacheLoader;
import com.x52im.rainbowchat.http.logic.dto.GroupEntity;
import com.x52im.rbchat.logic.alarm.model.AlarmDto;
import com.x52im.rbchat.cache.GroupsProvider;
import com.x52im.rbchat.logic.chat_root.face.EmojiUtil;

import androidx.fragment.app.Fragment;

import com.x52im.rbchat.R;
import com.x52im.rbchat.utils.IntentFactory;
import com.x52im.rbchat.utils.PreferencesToolkits;

/**
 * BBS(世界频道)专用的Alarm提示信息UI包装实现类.
 */
public class BBSAlarmUIWrapper {
    /** 父Fragment */
    private Fragment parentFragment = null;
    /** ui组件所属的内容父View对象，对应于Fragment中的getView()对象 */
    private View parentView = null;

    /** 主布局 */
    private ViewGroup layoutOfBBSAlarm = null;

    /** 收到BBS消息时要显示的消息主布局 */
    private ViewGroup layoutOfMessage = null;
    /** 没有收到BBS消息时要显示的提示信息主布局 */
    private ViewGroup layoutOfClickHint = null;

    /** 消息提示组件：用户头像 */
    private ImageView viewMessageAlarmHeadIcon = null;
    /** 消息提示组件：日期 */
    private TextView viewMessageAlarmDate = null;
    /** 消息提示组件：未读消息条数 */
    private TextView viewMessageAlarmFlagNum = null;
    /** 消息提示组件：标题 */
    private TextView viewMessageAlarmTitle = null;
    /** 消息提示组件：消息内容 */
    private TextView viewMessageAlarmMsg = null;

    /** 组件：是否静音 */
    private ImageView viewSilence = null;

//    // 用户头像使用缓存机制，这样在多个用户发消息情况下最大限度减少去网络下载头像的次数，为用户和服务端节省下载次数和流量
//    protected AsyncBitmapLoader asyncLoader = null;

    public BBSAlarmUIWrapper(Fragment parentFragment, View parentView) {
        this.parentFragment = parentFragment;
        this.parentView = parentView;
        //
//        this.asyncLoader = new AsyncBitmapLoader(AvatarHelper.getUserAvatarSavedDirHasSlash(parentFragment.getActivity())
//                , 1024); // 单位是KB，最大图片缓存是1M（不要多了，否则将常驻内存，浪费资源）

        initViews();
        initListeners();
    }

    private void initViews() {
        layoutOfBBSAlarm = (ViewGroup) parentView.findViewById(R.id.main_alarms_bbs_layout);

        layoutOfMessage = (ViewGroup) parentView.findViewById(R.id.main_alarms_bbs_message_alarmRL);
        layoutOfClickHint = (ViewGroup) parentView.findViewById(R.id.main_alarms_bbs_click_hintRL);

        viewMessageAlarmHeadIcon = (ImageView) parentView.findViewById(R.id.main_alarms_bbs_message_alarm_headIconView);
        viewMessageAlarmDate = (TextView) parentView.findViewById(R.id.main_alarms_bbs_message_alarm_dateView);
        viewMessageAlarmFlagNum = (TextView) parentView.findViewById(R.id.main_alarms_bbs_message_alarm_flagNumView);
        viewMessageAlarmTitle = (TextView) parentView.findViewById(R.id.main_alarms_bbs_message_alarm_titleView);
        viewMessageAlarmMsg = (TextView) parentView.findViewById(R.id.main_alarms_bbs_message_alarm_msgView);

        viewSilence = (ImageView) parentView.findViewById(R.id.main_alarms_bbs_silenceImageView);
    }

    private void initListeners() {
        layoutOfBBSAlarm.setOnClickListener(v -> {
            GroupEntity bbsGe = GroupsProvider.getDefaultWordChatEntity();
            // 进入BBS聊天界面
            parentFragment.startActivity(IntentFactory.createGroupChatIntent(parentFragment.getActivity(), bbsGe.getG_id(), bbsGe.getG_name()));
        });
    }

    private void refreshSilenceUI() {
        // 设置静态图标的显示与否
        if (!PreferencesToolkits.isChatMsgToneOpen(parentFragment.getActivity(), GroupEntity.DEFAULT_GROUP_ID_FOR_BBS))
            viewSilence.setImageResource(R.drawable.bbs_chatting_layout_silence_icon);
        else
            viewSilence.setImageResource(R.drawable.bbs_chatting_layout_member_icon);
    }

    public void onParentResume() {
        // 设置静态图标的显示与否
        refreshSilenceUI();
    }

    /**
     * 设置信息提示主布局的可见性.
     *
     * @param visible
     */
    private void setMessageAlarmVisible(boolean visible) {
        layoutOfMessage.setVisibility(visible ? View.VISIBLE : View.GONE);
        layoutOfClickHint.setVisibility(visible ? View.GONE : View.VISIBLE);
    }

    public void refreshData(AlarmDto data) {
        if (data != null) {
            this.viewMessageAlarmDate.setText(data.getDateHuman());
            this.viewMessageAlarmFlagNum.setText(data.getFlagNum());
            this.viewMessageAlarmTitle.setText(data.getTitle());
//		    this.viewMessageAlarmMsg.setText(data.getAlarmContent());
            // 查找替换为含有表情的富文本
            int emojiSize = (int) (viewMessageAlarmMsg.getTextSize() * 1.2);// 经测试getTextSize得到的已经是px，无需再转换。 *1.2 是因为得到的图片看起来比文字略小，所以增大20%
            SpannableString ss = EmojiUtil.replaceEmoticons(this.parentFragment.getActivity(), data.getAlarmContent(), emojiSize, emojiSize, DynamicDrawableSpan.ALIGN_BOTTOM);
            this.viewMessageAlarmMsg.setText(ss);

            if (CommonUtils.getIntValue(data.getFlagNum()) <= 0)
                viewMessageAlarmFlagNum.setVisibility(View.GONE);
            else
                viewMessageAlarmFlagNum.setVisibility(View.VISIBLE);

            // 加载头像图片
            ImageCacheLoader.loadAvatarImgWithGlide(parentFragment, data.getDataId(), null
                    , viewMessageAlarmHeadIcon
                    , 25 // 圆角单位是dp
                    , R.drawable.default_avatar_yuan_50_3x, true, false);

            // 设置ui可见性
            setMessageAlarmVisible(true);
        } else
            setMessageAlarmVisible(false);
    }
}